James Pond 3: Operation Starfish

Hacking notes, by Damian Grove

Date: 06/18/2010

These notes are for the Sega Genesis version, except where specified.



To modify this game, you must bypass EA's security system. Replace the 3 words
at 0x300 with NOP instructions (4E71). So there should be 4E71 4E71 4E71 at
that address.



09FD0E - 16-bit pointer to UP functionality on options
09FD12 - 16-bit pointer to DOWN functionality on options
09FD16 - 16-bit pointer to START functionality on options
09FD1A - 16-bit pointer to A functionality on options
09FD1E - 16-bit pointer to B functionality on options
09FD22 - 16-bit pointer to C functionality on options

09FF1C - Pointer to "AUDIO MODE-"
09FF20 - Pointer to "CONTROLS-"
09FF24 - Pointer to "INFORMATION BOXES-"
09FF28 - Pointer to "MUSIC TEST-"
09FF2C - Pointer to "SFX TEST-"
09FF30 - Pointer to "START LEVEL-"

0A2BF2 - Marker type
0A2BF3 - 24-bit pointer to MAP01 name on map screen (and in level!)
0A2BF6 - X position of MAP01 marker on map screen
0A2BF8 - Y position of MAP01 marker on map screen
0A2BFA - Marker to link with the up direction
0A2BFB - Marker to link with the down direction
0A2BFC - Marker to link with the left direction
0A2BFD - Market to link with the right direction
0A2BFE - When marker type is 01, this is made 0x80 (don't know why)
0A2BFF - When marker type is 01, this tells what marker to reference

For marker type (0A2BF2):
00 - normal
01 - arrow
FE - unlocked
FF - unlocked
Not sure the difference between FE and FF

Marker 0x79 is "The Forgotten Zone", which actually leads to "The Crystal Caverns". It
seems perhaps it was used to access Dr. Maybe's hideout before they finally decided to
make it unnecessary to get to it via The Crystal Caverns.

Markers are listed in order according to the map order. However, marker 00 corresponds
to MAP01, marker 01 corresponds to MAP02, and so on.



COMPRESSED STUFF:

031940 - Starfish logo
060000 - James Pond spinning rocket ship animation
062A3C - Mappings for spinning rocket ship animation



UNCOMPRESSED STUFF:

096A6C - Ending digits -- < !%'*3,-./0123456789:`"?cABCDEFGHIJKLMNOPQRSTUVWXYZ>



011D04 - Options maximum selection in savestate (05 unlocks all options)
012070 - Options music selection in savestate
012072 - Options sfx selection in savestate
012074 - Options selection in savestate (use 03-05 to access secret menu items)



0C615C - Basic object mappings
110D8A - Text mappings



Uncompressed Art:
014760 - Apple
014960 - Stawberry
014B60 - Orange
014D60 - Lemon
014F60 - Cupcake
015160 - James Pond icon
015360 - Coin
0153E0 - Angel Fish icon
015560 - Trophy
0158A0 - Crown
015BE0 - TV
015F20 - Heart
015FA0 - Star
016020 - Blue rock face thing
0161A0 - Cheese
016420 - Teeth
016720 - TNT
016F20 - Fruit gun
0171A0 - Jetpack
017220 - Helecopter thing
017420 - Umbrella
017620 - ???
0176A0 - Balloon
017720 - Springs
0177A0 - Weight
017920 - Hard hat
017F20 - Bomb
017FA0 - Poison
018020 - Gum ???
0180A0 - Finnius icon
018120 - Micro-map
018380 - Invincibility
018500 - Rock
018700 - Boot
018B40 - Fuel
018D20 - X-ray
024140 - Treasure 1
0241C0 - Treasure 2
024240 - Treasure 3
0242C0 - Treasure 4
024340 - Treasure 5
0243C0 - Treasure 6
024440 - Treasure 7
029940 - ? block
0299C0 - ? block empty
029A40 - ! block
029AC0 - ! block empty
029B40 - Moon block
029BC0 - Blue block
029C40 - Star block
029CC0 - Red block
029D40 - Purple block
029DC0 - Orange block
029E40 - Large ? block
02A040 - Large ? block empty
02A240 - Red teacup
02A2C0 - Yellow teacup
02A340 - Purple teacup
02A3C0 - Blue teacup
02A4A0 - Blue key
02A520 - Yellow key
02A5A0 - ID card
02A620 - Surveillance beacon
02A840 - Moon

Compressed art:
0CF166 - Various common blocks (right before prize blocks in VRAM)



0BA968 - Pointer to block art (!, ?, moon, etc.)
0BC034 - Uncompressed art pointers for pick-up items in status bar (0800-0824)
0C615C - Uncompressed art pointers for item animations (0800-0839)
	word - pointer (add to 0C6158)
	word - FE00


1031C2 - Block mappings for common blocks (0000-0018)



111068 - Collision table
111276 - Speed on various slopes (32-bits)
111636 - Angle of jump on various slopes (16-bits)



0CEC8A - Map (LVL) file pointers
0CEE8A - Map (LVL) background file pointers
0CF08A - Theme (ITM) tile mappings file pointers (a2)
0CF0B6 - Theme (INS) solidity file pointers (a3)
0CF0E2 - Theme (GLV) art file pointers (a0)
0CF10E - Theme block mappings file pointers (a1)
0CF13A - Theme animations file pointers

0D4CF2 - East of Edam art
0D8926 - Art file after East of Edam
104202 - East of Edam block mappings
105182 - Block mappings file after East of Edam
1129EC - MAP FILE 01: Garden of Edam
112B6C - Star in map 01
112CC8 - Main ground layout section on map 01
1678E4 - East of Edam mappings
17F10E - Garden of Edam mappigns

1203BE - (SNES) MAP FILE 01: Garden of Edam

Garden of Edam is CHEES01.LVL on the Amiga (0x7685C - Disk 2)



ART:
Compressed in PP20 format. Uncompressed data is in standard Sega 4bpp format.



TILE MAPPINGS HEADER:
string - "ITMS"
word - number of objects
word - pointer to object 0
word - pointer to object 1
word - pointer to object 2
word - pointer to object 3
word - pointer to object n...

DATA:
byte - object X size
byte - object Y size
word - block 0
word - block 1
word - block 2
word - block 3
word - block n...

Block value should be block + 0x18

Flags: xSxFxxxx xxxxxxxx
F - flip
S - make object solid



BLOCK MAPPINGS:
word - upper/left sprite
word - upper/right sprite
word - lower/left sprite
word - lower/right sprite

Flags: xPPFMxxx xxxxxxxx
M - mirror
F - flip
PP - palette



MAPS:
Maps are compressed in the PP20 format. Uncompressed data is as follows:

MAP HEADER:
string - "MAP"
byte - theme
word - map X size
word - map Y size
word - pointer to row 0
word - pointer to row 1
word - pointer to row 2
word - pointer to row 3
word - pointer to row n...

LAYOUT:
word - Object
word - X pos



MORE MAP LAYOUT STUFF:

0CBE46 - Trigger data pointers
0CBE48 - Pointer for MAP01
0CBF84 - MAP01 trigger 0E00 header
0CBF8C - MAP01 trigger 0E01 header
0CBF94 - MAP01 trigger 0E02 header
0CBFC4 - MAP01 trigger 0E00 data
	word 1 - animation/sound
	word 2 - macro to use
	word 3 - X position of marker
	word 4 - Y position of marker
	(repeat)
	make first word 0x0000 when you want to stop

Animation 0116 - moons
Animation 0100 - blocks

Macro 0092 - 4x4 moons
Macro 0093 - 8x8 moons



LEVEL SETUP:

MAP 00 (map screen):

0CB895 - Map front
0CB896 - Map background
0CB897 - Palette 1 (main)
0CB898 - Palette 2 (front)
0CB899 - Palette 3 (background)
0CB89A - Palette 4 (main flashing)
0CB89B - Background scroller A
0CB89C - Background scroller B
0CB89D - Background scroller C
0CB89E - Background scroller D
0CB89F - Front scroller
0CB8A0 - Flags (76543210)
	0 - Darker colors (cave)
	1 - Must activate exit-beacon to deactivate
	2 - Lower force of gravity (NEVER USED!)
	3 - Auto-scroll (not sure where script comes from)
	4 - ?
	5 - ?
	6 - Cheese mine destroyed icon on map upon completion
	7 - ?
0CB8A1 - Music (09-0F for levels -- 09 is null)

Repeat for next map...

PALETTE POINTERS:

111726 - Pointer to main in-game palette (main-1)
11172A - Pointer to flashing object palette (main-2)
11172E - Pointer to map screen palette A
111732 - Pointer to map screen palette B
111736 - Pointer to map screen palette C
11173A - Pointer to map screen palette D
11173E - Pointer to cheese palette A
111742 - Pointer to cheese background palette (red)
111746 - Pointer to slime cave palette A
11174A - Pointer to slime palette B
11174E - Pointer to icecream palette A

AMIGA (in file "CODE" -- uncompressed):
03449E - Cheese palette



OBJECTS AND BLOCKS:

0A71D2 - Block faces
	byte - pointer type (80 for VRAM, 00 for ROM)
		VRAM:
		06E0 - !
		06E4 - ! empty
		06D8 - ?
		06DC - ? empty
		06E8 - Moon
		06EC - Blue
		06F0 - Star
		06F4 - Red
		06F8 - Purple
		06FC - Orange
		069F - Switch off
		069B - Switch on
		06D4 - Rock
	word+1 - art pointer
	word - X size
	word - Y size
0A725A - Block type definitions
	word - block face
		0000 - !
		0001 - ! empty
		0002 - ?
		0003 - ? empty
		0004 - (!) -- prize is a block from this list
		0005 - (!) -- prize is a block from this list (any difference??)
		0006 - Moon
		0007 - Blue
		0008 - Star
		0009 - Red
		000A - Large ?
		000B - Large ? empty
		000C - Purple
		000D - Flasing ? and ! (Orange in block faces data)
		000E - Switch off
		000F - Switch on
		0010 - Rock
		FFFF - NULL (no block)
	word - prize (or existing block from list)
		Special:
		0000 - Dummy
		F000 - Function 0 - no prize
		F100 - Function 1 - crash!!!
		F200 - Function 2 - random prize (health)
		F300 - Function 3 - random prize (points)
		F400 - Function 4 - dummy (flashes when hit)
		F500 - Function 5 - moon sprout (00, 04, 08, 0C, FF-random])
		F600 - Function 6 - switch (tag determines activation marker)
		F700 - Function 7 - switch???
		F800 - Function 8 - switch???
		F900 - Function 9 - switch???
		FA00 - Function A - fruit gun (always available when needed)
		FB00 - Function B - star (00-single or 01-tripple)
		FC00 - Function C - create bridge
		FD00 - Function D - drop TNT (unused; tag is quantity, 00 is infinite!)
		FE00 - Function E - drop moons (tag is quantity, 00 is infinite!)
		FF00 - Function F - crash!!!
0C9B10 - Object (enemy) function pointers
0C9C10 - Object (enemy) functions
0CB4E8 - Object (pickup) properties

OBJECT VALUES:

0000 - floor, 64x32
0001 - floor, 128x32
0002 - floor, 256x32
0003 - solid 1, 32x32
0004 - solid 2, 32x32
0005 - solid 3, 64x64
0006 - solid 4, 128x128
0007 - floor/L-ramp, 48x80
0008 - L-ramp, 64x128
0009 - floor/R-ramp, 48x80
000A - R-ramp, 64x128
000B - floor/L-ramp, 48x48

0400 - Enemy: Spaceman
0401 - ??? (shakes screen for a moment)
0402 - Giant falling apple
0403 - Giant falling lemon
0404 - Giant falling cupcake
0405 - Enemy: Rat in car
0406 - Enemy: Tall rat pacing
0407 - TNT sign
0408 - ??? (shakes screen for a moment violently)
0409 - (nothing?)
040A - Enemy: Silver robot rat
040B - Enemy: Brown robot rat (faster)
040C - Ghost
040D - ... music plays, but game stays black / freezes
040E - Rocks being spit out from the ground
045E - Dr. Maybe (last boss)
0475 - Machine
0479 - Agent to rescue: Old frog guy from The Lost Caves
047A - Agent to rescue: Angel Fish
047B - Agent to rescue: Finnius the Frog
047F - Exit beacon

0800 - Coin
0801 - Trophy
0802 - Crown
0803 - TV
0804 - Heart
0805 - Star
0806 - Cheese
0807 - Teeth
0808 - TNT
0809 - Fruit gun
080A - Jetpack
080B - Umbrella
080C - ???
080D - Springs
080E - Weight
080F - Hard hat
0810 - Bomb
0811 - Poison
0812 - Gum ???
0813 - Finnius marker
0814 - Micro-map
0815 - Apple
0816 - Strawberry
0817 - Orange
0818 - Lemon
0819 - Cupcake
081A - Rock
081B - Invincibility
081C - Boot
081D - Moon
081E - Blue rock w/ eyes
081F - Helecopter
0820 - Balloon
0821 - (nothing?)
0822 - Jetpack fuel
0823 - Angel Fish marker
0824 - X-ray specs
0825 - Teacup 1
0826 - Teacup 2
0827 - Teacup 3
0828 - Teacup 4
0829 - Key to Cheese Tower
082A - Key to Crystal Cheese Caverns
082B - ID card??
082C - Lost moon treasure 1
082D - Lost moon treasure 2
082E - Lost moon treasure 3
082F - Lost moon treasure 4
0830 - Lost moon treasure 5
0831 - Lost moon treasure 6
0832 - Lost moon treasure 7
0833 - Control unit to I.C.U. satellite
0834 - (nothing?)
0835 - (nothing?)
0836 - (nothing?)
0837 - (nothing?)
0838 - Finnius marker (duplicate of 0813?)
0839 - Surveillance beacon
083A - ... crash
083B - ... crash
083C - ... crash

0900 - Block w/ coin
0901 - Block w/ trophy
0902 - Block w/ crown
0903 - Block w/ moon
0904 - Block w/ 4 moons
0905 - Block w/ 8 moons
0906 - Block w/ TV
0907 - Block w/ cheese
0908 - Block w/ teeth
0909 - Block w/ TNT
090A - Block w/ TNT (duplicate?)
090B - Block w/ heart
090C - Block w/ fruit gun
090D - Block w/ umbrella
090E - Block w/ ???
090F - Block w/ springs
0910 - Block w/ weight
0911 - Block w/ mining helmet
0912 - Block w/ gum ???
0913 - Block w/ helecopter
0914 - Block w/ balloon
0915 - Block w/ green apple
0916 - Block w/ red apple
0917 - Block w/ orange
0918 - Block w/ lemon
0919 - Block w/ cupcake
091A - Block w/ rock
091B - Block w/ invincibility
091C - Block w/ boot
091D - Hidden block w/ coin
091E - Block w/ 8 moons (duplicate of 0905?)
091F - Block w/ TV (duplicate of 0906?)
0920 - Block w/ cheese (duplicate...?)
0921 - Block w/ teeth (duplicate...?)
0922 - Block w/ TNT (duplicate...?)
0923 - Block w/ TNT (duplicate...?)
...
0935 - Block w/ bridge
0936 - Hidden block w/ bridge
0937 - Moon block, slim
0938 - Moon block, medium
0939 - Moon block, wide
093A - Moon block, random
093B - Star block, 1 star
093C - Star block, 3 stars
093D - ? Block w/ fruit gun
093E - Block w/ nothing
093F - Block w/ nothing
0940 - Block w/ nothing
0941 - Hidden purple block
0942 - Block that makes player not able to move (but can jump) ??
0943 - Block that makes player not able to move (but can jump) ??
0944 - Block that makes player not able to move (but can jump) ??
0945 - Block that makes player not able to move (but can jump) ??
0946 - Block that makes player not able to move (but can jump) ??
0947 - Rock block ??
0948 - Green trigger block
0949 - Flashing ? ! block w/ crown
094A - Flashing ? ! block w/ star
094B - Purple block

0A00 - Swing

0B00 - Visible black hole

0C00 - Invisible black hole

0Exx - Special function

0Fxx - Black hole to go to another map
LSB = 0 if you want to start the map from the normal start position
LSB = 1 if you want to start the map from the upper-left corner
Bits 1-7 are the map number

1000 - Visible black hole that does nothing

1100 - Player start position

1200 - Spawn marker (used in conjuction with 0Exx)

1400 - Boss: Kentucky Fried Fiend
1401 - Boss: The Lumpsville Lurker



THEMES:

00 - (map screen)	[MAPSCR / MAP]
01 - Cheese		[CHEESE]
02 - Slime		[SLIME]
03 - Slime Cave		[SLIMECAV / SLIMCAVE]
04 - Ice Cream		[ICECREAM / ICE]
05 - Butter		[BUTTER]
06 - Custard		[CUSTARD]
07 - Blue Cheese	[BLUECHEE]
08 - Crystal Cave	[CHEECAV / CHEECAVE]
09 - Yoghurt		[YOGHURT]
0A - Cheese Alternate	[CHEEROC / CHEEROCK]



Theme 0A is used by "Garden of Edam" and "Mozzarella Over-Mine".
It replaces crate graphics with the rocket ship and adds spikes.



MAPS:

00 - (map screen)		[MAP]
01 - Garden of Edam		[CHEES01]
02 - East of Edam		[KTCHEE1]
03 - Parmesan Plains
04 - Grater Gruyere
05 - Gouda Gully
06 - Hot Custard Springs
07 - Bubbling Plains
08 - Lumpsville
09 - The Lumpsville Lurker
0A - Lower Gloopy
0B - Gloopy Henge
0C - Little Pimple
0D - The Fungal Jungle
0E - Rennet Mine 1
0F - Rennet Mine 2
10 - Mozzarella Over-Mine	[MINE1]
11 - More Murky Moors
12 - Lair of the Mush-Beast
13 - Slimeswold
14 - Lower Slimeswold
15 - Slimeswold-Under-Cheese
16 - Curdle Mine
17 - Citrus Rapids
18 - The Arran Archipelago
19 - Gurgleton
1A - Pi-Rat Harbour
1B - Sliterpool
1C - Curdleburg
1D - Little Curdlington
1E - Upper Curdlington
1F - Curdlington on the Whey
20 - Kentucky Fried Fiend	(Spooky Butter - AMIGA)		(Chicken Surprise - SNES)
21 - Wendsleydale Wastelands
22 - The Floating Folly
23 - Parmesan Peaks
24 - The Feta Flatlands
25 - The Fungi Strikes Back
26 - Glace Glacier
27 - Sorbet on Sea
28 - Scoopingdon
29 - Triple Scoopingdon
2A - Land of the Giants
2B - The Melting Downs
2C - Waferville
2D - Bovine Aerial Assault
2E - * Camonbert Canyon (Penguin Hideout - AMIGA)	[PENGBON1]
2F - * Camonbert Canyon
30 - * Camonbert Canyon
31 - * Camonbert Canyon
32 - * Camonbert Canyon
33 - * Camonbert Canyon
34 - Camonbert Canyon
35 - Roquefort Ridge
36 - Gorgonzola Gorge
37 - Caerphilly Down
38 - Dessert Desert
39 - Caerphilly Steppes
3A - Outer He-Brie-Dees
3B - Cheddar Chasm
3C - The Chunnel
3D - Murky Moors
3E - Custard Craters
3F - Banana Basin
40 - Toadstool Point
41 - Slimey Knoll
42 - Poltergeist Valley
43 - Bilgington Barrows
44 - Limburger Reach
45 - Dripping Downs
46 - Eastern Cheddar Hoard
47 - Nibbleston Fell
48 - Cheese Silo
49 - Nibbleston Quarry
4A - Subterranean Stiltonium
4B - Greater Pimple
4C - Fruit Falls
4D - Mushy Marsh
4E - Rottington Ridge
4F - Fruitassic Park
50 - Cherry Cascade
51 - Fruitopolis
52 - Yoghurtopia
53 - Lower Curdleburg
54 - Buttercup Ridge
55 - Buttercup Plains
56 - Lake Butterfingers
57 - / Butterscotch Glen
58 - / Lower Whey
59 - Slippery Slopes
5A - Roquefort Peninsula
5B - Parmesan Plateau
5C - The Munster Moors
5D - Blue Forest Plateau
5E - Blue Cheese Badlands
5F - The Prussian Precipice
60 - Double Scoopingdon
61 - The Peppermint Pinnacles
62 - The Mocha Mountains
63 - + The Long Tunnel
64 - Blue Moon Dunes
65 - Neopolitan Peninsula
66 - Hidden Cheese Silo
67 - Nether Slimeswold
68 - Deadend Caves
69 - Crystalline Cuttings
6A - Splinter Pit
6B - Crystal Corridors
6C - The Crystal Run
6D - Killer Chasm
6E - Crytalline Cheese Chunks
6F - The Lost Caves
70 - ! The Cheese Tower
71 - ! The Secret Slime Pit
72 - ! The Wolds
73 - ! The Wolds
74 - ! The Wolds
75 - ! The Curdleburg Chasm
76 - ! Riccottacombes
77 - ! The Crystal Caverns
78 - ! The Crystal Caverns
79 - ! The Crystal Caverns
7A - ! The Forgotten Zone
7B - ! The Cheese Tower-Top
7C - ! The Overwold
7D - ! The Overwold
7E - ! The Overwold
7F - ! The Slime Plains
80 - ! The Butter Mound
81 - ! The Blue Cheese Ledge
82 - ! The Blue Cheese Cascade
83 - ! The Blue Cheese Cliffs

* DELETED MAP
+ MAP ONLY PARTIALLY LISTED IN JP3 FAQ
/ MAP NOT LISTED AT ALL IN JP3 FAQ
! NOT A MAP

MAP NOT IN GENESIS VERSION - Penguin Hideout



PASSWORD INDEX

00 - Moon
01 - Star	(5 health)
02 - Rocket	(Unlimited jetpack fuel)
03 - UFO
04 - Cheese
05 - Diamond
06 - Flower
07 - Mushroom
08 - Frog
09 - Mouse
0A - Cat
0B - Dog	(Always have x-ray specs)
0C - Elephant
0D - Fish	(Invincibility)
0E - Skull	(1 health)
0F - Heart	(Crapload of lives)
10 - Pick
11 - Wrench
12 - TNT
13 - Bomb
14 - Hand
15 - Car
16 - Teacup	(All cheese mines destroyed)
17 - Cupcake	(Start with homing cupcakes)
18 - Book	(Full map)
19 - Hammer
1A - Computer
1B - Teeth	(Eat enemies without harm -- use with Finnius cheat)
1C - Candy
1D - Umbrella
1E - Bottle
1F - Boot

00 - Red
20 - Yellow
40 - Green
60 - Blue

01211E - Password characters in savestate (22 characters)

09F8CA - Password cheat to play as Finnius the Frog (48 48 48 48 ...)
09F8F4 - Password cheat to enable different goodies (04 29 4A 6B ...)



AMIGA SPECIFICS:

In file "CODE" (decompressed)

01CD28 - 'NIGHTMARE'
01CD62 - 'EVAS'
01CD96 - 'UNCLE ROGER'
01CDD0 - 'FORMAT'

For addressing things, pointers should have 11C800 added to them.
